package com.giacom.docx4j.motor;

import java.util.ArrayList;
import java.util.List;

/**
 * Classe para exibir os resultados da execucao do Motor
 * @author sandro.giacomozzi
 *
 */
public class Resultado {
	
	private static Resultado res;
	
	public enum TIPO {REGRA, PLUGIN};
	
	public enum TIPO_RESULTADO {FALHA, ALERTA, SUCESSO};
	
	private static List<Resultado> listaResultado;
	
	private TIPO tipo;
	
	private TIPO_RESULTADO tipoResultado;
	
	private String mensagem;
	
	private String modeloXML;
	
	private String documentoWord;

	/**
	 * Construtor privado
	 */
	private Resultado(){}
	
	/**
	 * Adiciona um resultado
	 * @param tipo
	 * @param tipoResultado
	 * @param mensagem
	 */
	public void adicionaResultado(TIPO tipo, TIPO_RESULTADO tipoResultado, String mensagem){
		if(listaResultado == null){
			listaResultado = new ArrayList<Resultado>();
		}
		Resultado r = new Resultado();
		r.setTipo(tipo);
		r.setTipoResultado(tipoResultado);
		r.setMensagem(mensagem);
		listaResultado.add(r);
	}

	/**
	 * Exibe os resultados
	 */
	public void exibeResultadoTexto() {
		System.out.println(getResultado());
	}

	private String getResultado(){
		StringBuilder sb = new StringBuilder();
		sb.append("\n\nResultado do processamento (");
		sb.append(this.modeloXML);
		sb.append(" x ");
		sb.append(this.documentoWord);
		sb.append(")");
		sb.append("\n----------------------------------------------------------------------------------");
		sb.append("\nTIPO	RESULTADO	MENSAGEM");
		sb.append("\n----------------------------------------------------------------------------------\n");
		
		for (Resultado r : listaResultado) {
				sb.append(r.getTipo().toString());
				sb.append("\t");
				sb.append(r.getTipoResultado().toString());
				sb.append("\t\t");
				sb.append(r.getMensagem());
				sb.append("\n");
		}
		
		return sb.toString();
	}
	
	public static Resultado getInstance(){
		if(res == null){
			res = new Resultado();
		}
		return res;
	}
	
	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public TIPO getTipo() {
		return tipo;
	}

	public void setTipo(TIPO tipo) {
		this.tipo = tipo;
	}

	public TIPO_RESULTADO getTipoResultado() {
		return tipoResultado;
	}

	public void setTipoResultado(TIPO_RESULTADO tipoResultado) {
		this.tipoResultado = tipoResultado;
	}

	public List<Resultado> getListaResultado() {
		return listaResultado;
	}

	public String getModeloXML() {
		return modeloXML;
	}

	public void setModeloXML(String modeloXML) {
		this.modeloXML = modeloXML;
	}

	public String getDocumentoWord() {
		return documentoWord;
	}

	public void setDocumentoWord(String documentoWord) {
		this.documentoWord = documentoWord;
	}

	
}
